package com.dd.util;

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;

import java.lang.reflect.Type;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException; // 导入此包

public class LocalDateTimeAdapter implements JsonSerializer<LocalDateTime>, JsonDeserializer<LocalDateTime> {

    // 定义日期时间格式，与您的 JSON 文件中的 reportTime 格式保持一致
    // 假设您的 JSON 中的日期时间格式是 "yyyy-MM-dd'T'HH:mm:ss" 或类似的 ISO 格式
    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ISO_LOCAL_DATE_TIME;

    @Override
    public JsonElement serialize(LocalDateTime src, Type typeOfSrc, JsonSerializationContext context) {
        return new JsonPrimitive(src.format(FORMATTER));
    }

    @Override
    public LocalDateTime deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
            throws JsonParseException {
        try {
            // 尝试解析为 LocalDateTime
            return LocalDateTime.parse(json.getAsString(), FORMATTER);
        } catch (DateTimeParseException e) {
            // 如果解析失败，可能是因为格式不匹配，或者数据有误
            throw new JsonParseException("Cannot parse date-time: " + json.getAsString(), e);
        }
    }
}
